package xsvg;

import java.util.List;

/**
 * 
 * SVG标签节点接口类
 * 
 * 
 * @author <a href="mailto:peixere@qq.com">裴绍国</a>
 * @version 2013-09-29
 */
public interface SVGElement
{

	/**
	 * 获取标签名称
	 * @return
	 */
	public abstract String getTagName();

	/**
	 * 设置标签名称
	 * @param tagName
	 */
	public abstract void setTagName(String tagName);

	/**
	 * 节点标识
	 * @return
	 */
	public abstract String getId();

	/**
	 * 设置标签是否显示
	 * @param flag
	 */
	public abstract void setVisible(boolean flag);

	/**
	 * 获取标签是否显示
	 * @return
	 */
	public abstract boolean getVisible();

	/**
	 * 获取标签
	 * @return
	 */
	public abstract SVGElement getParent();

	/**
	 * 设置子标签
	 * @param element
	 */
	public abstract void setParent(SVGElement element);

	/**
	 * 根据属性名称取对应值
	 * @param name
	 * @return
	 */
	public abstract String getAttribute(String name);

	/**
	 * 根据属性名称设置值，如属性名称不存在，先加名称到节点并设置值
	 * @param name 属性名称
	 * @param value 值
	 */
	public abstract void setAttribute(String name, String value);

	/**
	 * 是否存在属性名
	 * @param name 属性名
	 * @return
	 */
	public abstract boolean hasAttribute(String name);

	/**
	 * 添加属性
	 * @param name 名称
	 * @param value 值
	 */
	public abstract void addAttribute(String name, String value);

	/**
	 * 删除属性
	 * @param name 名称
	 */
	public abstract void removeAttribute(String name);

	/**
	 * 获取子节点集合
	 * @return
	 */
	public abstract List<SVGElement> getChildren();

	/**
	 * 取子节点个数
	 * @return
	 */
	public abstract int getNumChildren();

	/**
	 * 根据id属性标识取子节点对象
	 * @param id
	 * @return
	 */
	public abstract SVGElement getChild(String id);

	/**
	 * 根据子节点索引序号取子节点对象
	 * @param index 索引序号
	 * @return
	 */
	public abstract SVGElement getChild(int index);

	/**
	 * 取子节点的索引序号
	 * @param child
	 * @return
	 */
	public abstract int indexOfChild(SVGElement child);

	/**
	 * 删除子节点
	 * @param child
	 */
	public abstract void removeChild(SVGElement child);

	/**
	 * 添加子节点
	 * @param child
	 */
	public abstract void addChild(SVGElement child);

	/**
	 * 在指定索引添加子节点，索引后的数据后移
	 * @param index
	 * @param child
	 */
	public abstract void addChild(int index, SVGElement child);

	/**
	 * 交换子节点位置
	 * @param i
	 * @param j
	 */
	public abstract void swapChildren(int i, int j);

}
